print 'koro.modules.prodotti'
from sqlalchemy import desc
from koro.core.model import ModuleInfo
from koro.modules.prodotti import context,ui,model,__version__
from koro.modules.prodotti.ui import page
from koro.modules.anagrafiche.model import ClienteFornitore
from koro.modules.commerciale.model import Iva


info=ModuleInfo(dependency=('anagrafiche',),
                description='Modulo per la gestione dei prodotti. ',
                version=__version__.VERSION_STRING,
                weight=300)

def id_map():    
    return {ui.ID_PRODOTTI_PAGE:context.ProdottiContext,
            ui.ID_CATEGPROD_PAGE:context.CategorieProdottiContext}

def context_map():    
    return {context.ProdottiContext:(page.ProdottiPage,(),{}),
            context.CategorieProdottiContext:(page.CategorieProdottiPage,(),{})}

def name_map():    
    return {'PRODOTTI':context.ProdottiContext,
            'CATEG_PRODOTTI':context.CategorieProdottiContext,
            }

def or_mapping(mapper,relation,metadata,Table):
    mapper(model.Formula,Table('formule_prezzi',metadata,autoload=True),
           properties={'listino_origine':relation(model.Listino,viewonly=True)})    
    categ_table=Table('categorie_prodotto',metadata,autoload=True)
    mapper(model.CategoriaProdotto,categ_table)
    mapper(model.InfoFornitore,Table('info_fornitore',metadata,autoload=True),
           properties={'fornitore':relation(ClienteFornitore),}
           )        
    prod_table=Table('prodotti',metadata,autoload=True)
    mapper(model.Prodotto,prod_table,
           properties={'info_fornitori':relation(model.InfoFornitore,cascade="all, delete, delete-orphan",order_by=desc(model.InfoFornitore.principale),backref='prodotto'),
                       'categoria':relation(model.CategoriaProdotto,primaryjoin=prod_table.c.fk_categoria==categ_table.c.ID,foreign_keys=[prod_table.c.fk_categoria]),
                       'sottocategoria':relation(model.CategoriaProdotto,primaryjoin=(prod_table.c.fk_sottocategoria==categ_table.c.ID),foreign_keys=[prod_table.c.fk_sottocategoria]),
                       'aliquota_iva':relation(Iva,viewonly=True,uselist=False),
                       'info_prezzi':relation(model.PrezzoProdotto,cascade="all, delete, delete-orphan",backref='prodotto'),                                                               
                      }
          )
    mapper(model.PrezzoProdotto,Table('prezzi_prodotti',metadata,autoload=True),
           properties={'formula':relation(model.Formula,
                                          uselist=False,
                                          cascade="all, delete, delete-orphan",
                                          single_parent=True),                       
                        })   


def menu(menubar):
    ui.do_menu(menubar)

def option_view():
    return None